//两句话中的不常见单词
/*句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。

如果某个单词在其中一个句子中恰好出现一次，在另一个句子中却 没有出现 ，那么这个单词就是 不常见的 。

给你两个 句子 s1 和 s2 ，返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
*/
class Solution {
public:
    vector<string> uncommonFromSentences(string s1, string s2) {
        unordered_map<string, int> m;
        stringstream ss;
        ss << s1 << " " << s2;
        string s;
        while(ss >> s) ++m[s];
        vector<string> ans;
        for(auto& [s, c]: m) if(c == 1) ans.emplace_back(move(s));
        return ans;
    }
};


//面试题 01.06. 字符串压缩
/*字符串压缩。利用字符重复出现的次数，编写一种方法，实现基本的字符串压缩功能。比如，字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短，则返回原先的字符串。你可以假设字符串中只包含大小写英文字母（a至z）。
*/
class Solution {
public:
    string compressString(string S) {
        int count = 1;
        // old_char = S[0];
        string ret(1, S[0]);
        for (int i = 1; i < S.size(); i++) {
            if (S[i] == S[i - 1]) {
                count++;
            } else {
                ret += to_string(count);
                ret += S[i];
                count = 1;
            }
        }
        ret += to_string(count);
        if (ret.size() < S.size())
            return ret;
        return S;
    }
};